//
//  main.c
//  变量类型修饰符
//
//  Created by ws on 2017/7/19.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>
/**
 获取最大值和最小值
 //整型表示的最大数
 int a = (1 << 31);// -2147483648 ~ 2147483647
 printf("%d\n",a);//-2147483648
 //整型表示的最大数
 int b = (1 << 31) - 1;// -2147483648 ~ 2147483647
 printf("%d\n",b);//2147483647
 
 printf("%d\n",0b10000000000000000000000000000001);//-2147483647
 printf("%d\n",0b11111111111111111111111111111110); -2
 printf("%d\n",0b11111111111111111111111111111111);//-1
计算机识别的最大值和最小值(int类型)
 10000000000000000000000000000000 -->最小值 2147483647     2的31次方 - 1
 01111111111111111111111111111111 -->最大值 -2147483648    -2的31次方
 最大的整数 + 1 = 最小的负数
   
 */
/**
 一下是针对64位操作系统说的:
 变量的修饰符
 1.修饰长度:
 short 占16位(2个字节) 输出格式符 %hd
 int 占32位(4个字节) %d
 long 占64位(8个字节) %ld
 long long 占64位(也占8个字节) %lld
 注意: 在64位操作系统下 long和long long 都占8个字节  
      在32位操作系统下 int占2个字节 , long占4个字节 ,long long占8个字节
 
 unsigned short 占16位(2个字节) 输出格式符 %hu
 unsigned int 占32位(4个字节) %u
 unsigned long 占64位(8个字节) %lu
 unsigned long long 占64位(也占8个字节) %llu
 
 short,long,long long 都是用来修饰int的 int可以省略
 
 2.修饰符号:
  signed:表示有符号的数(默认的)
  unsigned:表示无符号的数(无符号的数只能表示正数不能表示负数,最高位不再是符号位而是数字位)
 
 修饰符号的修饰符都能修饰长度的修饰符
 */
int main(int argc, const char * argv[]) {
    
    short int h = (1 << 15) - 1; //short所表示的最大范围 -2的15次方 ~ 2的15次方减1 (short占两个字节)
    printf("%hd\n",h);
    
    long int l = ((long)1 << 63) - 1; //long所表示的最大范围 -2的63次方 ~ 2的63次方减1 (short占两个字节)
    printf("%ld\n",l);
    
    long long int ll = ((long long)1 << 63) - 1; //long long所表示的最大范围 -2的63次方 ~ 2的63次方减1 (short占两个字节)
    printf("%lld\n",ll);
    
    //无符号的整型
    unsigned int a = 1;// 表示的范围:0 ~ 2的32次方 - 1
    printf("%u\n",a);
    unsigned int aa = 0b11111111111111111111111111111111;// 0 ~ 2的32次方 - 1
    printf("%u\n",aa);
    unsigned short us = 1;// 0 ~ 2的16次方减1
    printf("%hu\n",us);
    unsigned long ul = 1;// 0 ~ 2的64次方减1
    printf("%lu\n",ul);
    unsigned long long ull = 1;// 0 ~ 2的64次方减1
    printf("%llu\n",ull);
    return 0;
}
